/*
 * 
*/ 

#include <string>
using std::string; 

#include <iostream>
using std::cout; using std::endl;

int main() 
{
	string numbers("0123456789"), name("r2d2");
	// 返回1, 既, name中第一个数字的下标
	auto pos = name.find_first_of(numbers);  
	if (pos != string::npos)
		cout << "found number at index: " << pos 
		     << " element is " << name[pos] << endl;
	else
		cout << "no number in: " << name << endl;
	
	pos = 0;  
	/*
	while的循环条件将pos重置为从pos开始遇到的第一个数字的下标.
	只要find_first_of返回一个合法下标,我们就打印当前结果并递增pos.
	*/
	// 每步循环查找name中下一个数
	while ((pos = name.find_first_of(numbers, pos)) 
	              != string::npos) {
	    cout << "found number at index: " << pos 
	         << " element is " << name[pos] << endl;
	
	    ++pos; // 移动到下一个字符
	}
	
	string river("Mississippi");
	// rfind 成员函数搜索最后一个匹配, find返回下标1,表示第一个"is"的位置,而rfind返回下标4,表示最后一个"is"的位置.
	auto first_pos = river.find("is");  // returns 1
	auto last_pos = river.rfind("is");  // returns 4
	cout << "find returned: " << first_pos 
	     << " rfind returned: " << last_pos << endl;
	
	string dept("03714p3");
	// 返回 5--字符'p'的下标
	pos = dept.find_first_not_of(numbers);
	cout << "first_not returned: " << pos << endl;
	
	return 0;
}
